package br.ucb.ucblive.managedbean;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import br.ucb.ucblive.HIB.AlunoHIB;
import br.ucb.ucblive.HIB.CursoHIB;
import br.ucb.ucblive.HIB.DisciplinaHIB;
import br.ucb.ucblive.HIB.UsuarioHIB;
import br.ucb.ucblive.beans.Aluno;
import br.ucb.ucblive.beans.Curso;
import br.ucb.ucblive.beans.Disciplina;
import br.ucb.ucblive.beans.Usuario;

@ManagedBean (name="alunoManagedBean")
@SessionScoped
public class AlunoManagedBean {
	private Aluno aluno;
	private List<Aluno> alunos;
	private AlunoHIB alunoHib;
	private List<Curso> cursos;
	private List<Curso> cursoLogadoAluno;
	private List<Disciplina> disciplinaLogadoAluno;
	private String query;
	private UsuarioHIB usuarioHIB;
	private Usuario usuarioLogin;
	
	public AlunoManagedBean(){
		setAluno(new Aluno());
		setAlunos(new ArrayList<Aluno>());
		setAlunoHib(new AlunoHIB());
		setQuery(new String());
		setUsuarioHIB(new UsuarioHIB());
		setUsuarioLogin(usuarioHIB.consultar(FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal().getName()));
	}
	
	public List<Curso> getCursoLogadoAluno() {
		return cursoLogadoAluno;
	}

	public void setCursoLogadoAluno(List<Curso> cursoLogadoAluno) {
		this.cursoLogadoAluno = cursoLogadoAluno;
	}

	public List<Disciplina> getDisciplinaLogadoAluno() {
		return disciplinaLogadoAluno;
	}

	public void setDisciplinaLogadoAluno(List<Disciplina> disciplinaLogadoAluno) {
		this.disciplinaLogadoAluno = disciplinaLogadoAluno;
	}

	public Aluno getAluno() {
		return aluno;
	}

	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}

	public List<Aluno> getAlunos() {
		return alunos;
	}

	public void setAlunos(List<Aluno> alunos) {
		this.alunos = alunos;
	}
	
	public AlunoHIB getAlunoHib() {
		return alunoHib;
	}

	public void setAlunoHib(AlunoHIB alunoHib) {
		this.alunoHib = alunoHib;
	}
	
	public List<Curso> getCursos() {
		return cursos;
	}

	public void setCursos(List<Curso> cursos) {
		this.cursos = cursos;
	}
	
	public String getQuery() {
		return query;
	}

	public void setQuery(String query) {
		this.query = query;
	}
	public UsuarioHIB getUsuarioHIB() {
		return usuarioHIB;
	}

	public void setUsuarioHIB(UsuarioHIB usuarioHIB) {
		this.usuarioHIB = usuarioHIB;
	}
	public Usuario getUsuarioLogin() {
		return usuarioLogin;
	}
	public void setUsuarioLogin(Usuario usuarioLogin) {
		this.usuarioLogin = usuarioLogin;
	}
	

	public void insere(Usuario usuario) {
		getAluno().setUsuario(usuario);
		getAlunos().add(getAluno());
		System.out.println(getAluno().toString());
		alunoHib.salvar(aluno);
		setAluno(new Aluno());	
	}

	public void populaCursos() throws SQLException{
		CursoHIB cursoHib = new CursoHIB();
	    cursos = cursoHib.listar();
	}
	public void populaCursosAluno(Usuario usuario)throws SQLException{
		CursoHIB cursoHib = new CursoHIB();
		cursoLogadoAluno = cursoHib.listarCursosByUsuario(usuario);
	}
	public void populaDisciplinaAluno(Usuario usuario)throws SQLException{
		DisciplinaHIB disciplinaHib = new DisciplinaHIB();
		disciplinaLogadoAluno =disciplinaHib.listarDisciplinasByUsuario(usuario);
	}
	
	public String listarAluno(){
		setAlunos(new ArrayList<Aluno>());
		List<Aluno> users = new ArrayList<Aluno>();
		
		for (Aluno a : alunoHib.listarOrdemCrescente()){
			if(a.getNome().toUpperCase().contains(query.toUpperCase()))
				users.add(a);
		}
		alunos.addAll(users);
		setQuery(new String());
		return "/adm/alunoList?faces-redirect=true";
	}
	
	
	
	public String listarAlunos(){
		setAlunos(new ArrayList<Aluno>());
		setCursos(new ArrayList<Curso>());
		CursoHIB cursoHib = new CursoHIB();
		List<Aluno> users = new ArrayList<Aluno>();
		cursos = cursoHib.listarCursosByUsuario(usuarioLogin);
		
		if(!cursos.isEmpty()){
			if(usuarioLogin.getTipo()==1){
				for(Aluno a : cursoHib.listarAlunosByCurso(cursos.get(0))) {  
		            if(a.getNome().toUpperCase().contains(query.toUpperCase()))  
		                users.add(a);  
		        }  	
			}
			if(usuarioLogin.getTipo()==2){
				for(Curso c: cursos){
					for(Aluno a : cursoHib.listarAlunosByCurso(c)){
						if(a.getNome().toUpperCase().contains(query.toUpperCase()))
							users.add(a);
					}
				}
			}
			alunos.addAll(users);
		}
		setQuery(new String());
		return "/pro/warnList?faces-redirect=true";
	}
	
	
	
}
